package FileClient;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Observable;
import java.util.Observer;

/**
 * Ansvarar för socket objekt mellan klienten och servern. Skapar en instans av
 * ClientInput och observerar klienten för att kunna stänga ner anslutningen
 */
public class Connection implements Observer {
	private Socket clientSocket;
	private String id;

	/**
	 * Standard konstruktor
	 * @param id Vilken server som avses anslutas till
	 */
	public Connection(String id) {
		this.id = id;
	}

	/**
	 * Ansluter och returnerar OutputStream
	 * 
	 * @param c Klienten som ska användas
	 * @return OutputStream
	 * @throws UnknownHostException
	 * @throws IOException
	 */
	public OutputStream Connect(Client c) throws UnknownHostException,
			IOException {
		c.addObserver(this);
		String s[] = id.split(":");
		clientSocket = new Socket(s[0], Integer.parseInt(s[1]));
		ClientInput ci = new ClientInput(clientSocket.getInputStream(), c, id);
		ci.start();
		return clientSocket.getOutputStream();
	}

	/**
	 * Disconnectar
	 */
	public void update(Observable arg0, Object arg1) {
		if (clientSocket.isConnected()) {
			try {
				clientSocket.close();
			} catch (IOException e) {
				System.out.println("Could not close socket: " + id);
				e.printStackTrace();
			}
		}
	}
}
